"""
配置管理模块
集中管理系统配置，支持自定义配置
"""

import os
from datetime import timedelta

class Config:
    """系统配置类"""
    
    # ==================== 数据源配置 ====================
    DATA_SOURCE = "akshare"  # akshare, tushare, 自定义
    
    # ==================== 缓存配置 ====================
    ENABLE_CACHE = True  # 是否启用缓存
    CACHE_DIR = "cache"  # 缓存目录
    CACHE_EXPIRE_TIME = timedelta(minutes=5)  # 缓存过期时间（实时数据）
    HIST_CACHE_EXPIRE_TIME = timedelta(hours=4)  # 历史数据缓存时间
    
    # ==================== 数据获取配置 ====================
    REQUEST_RETRY = 3  # 请求重试次数
    REQUEST_TIMEOUT = 30  # 请求超时时间（秒）
    REQUEST_DELAY = 1  # 请求间隔（秒）
    
    # 智能数据获取配置 ✨ NEW
    AUTO_DETECT_TRADING_DAY = True  # 自动检测交易日
    USE_LAST_TRADING_DAY_ON_HOLIDAY = True  # 休市时使用最近交易日数据
    FORCE_USE_DATE = None  # 强制使用指定日期的数据（格式：'YYYY-MM-DD'），None则自动判断
    
    # ==================== 技术指标配置 ====================
    MA_PERIODS = [5, 10, 20, 60, 120, 250]  # 均线周期
    RSI_PERIODS = [6, 12, 24]  # RSI周期
    MACD_FAST = 12  # MACD快线
    MACD_SLOW = 26  # MACD慢线
    MACD_SIGNAL = 9  # MACD信号线
    KDJ_PERIOD = 9  # KDJ周期
    BOLL_PERIOD = 20  # 布林带周期
    BOLL_STD = 2  # 布林带标准差倍数
    
    # ==================== 量化分析配置 ====================
    # 评分权重配置
    SCORE_WEIGHTS = {
        'trend': 0.30,      # 趋势分析权重
        'macd': 0.25,       # MACD权重
        'kdj': 0.20,        # KDJ权重
        'rsi': 0.10,        # RSI权重
        'boll': 0.10,       # 布林带权重
        'volume': 0.05,     # 成交量权重
    }
    
    # 评分阈值
    SCORE_THRESHOLDS = {
        'strong_buy': 75,   # 强烈买入
        'buy': 60,          # 买入
        'hold': 45,         # 观望
        'sell': 30,         # 减仓
    }
    
    # ==================== 风险控制配置 ====================
    MAX_VOLATILITY = 50  # 最大波动率(%)
    MAX_DRAWDOWN = -30   # 最大回撤(%)
    MIN_SHARPE = 0       # 最小夏普比率
    
    # ==================== 数据导出配置 ====================
    EXPORT_DIR = "exports"  # 导出目录
    EXPORT_FORMAT = "xlsx"  # 默认导出格式 (xlsx, csv)
    
    # ==================== 日志配置 ====================
    LOG_LEVEL = "INFO"  # DEBUG, INFO, WARNING, ERROR
    LOG_FORMAT = '%(asctime)s [%(levelname)s] %(message)s'
    LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
    
    # ==================== 界面配置 ====================
    PAGE_TITLE = "智能股票量化分析系统"
    PAGE_ICON = "📈"
    LAYOUT = "wide"
    
    # 默认历史数据天数
    DEFAULT_HISTORY_DAYS = 30
    
    # K线图显示天数
    CHART_DISPLAY_DAYS = 120
    
    # ==================== 扩展功能配置 ====================
    ENABLE_MULTI_STOCK = True  # 启用多股票对比
    ENABLE_EXPORT = True  # 启用数据导出
    ENABLE_STRATEGY = True  # 启用自定义策略
    ENABLE_BACKTEST = False  # 启用回测（待开发）
    ENABLE_ALERT = False  # 启用预警（待开发）
    
    @classmethod
    def get(cls, key, default=None):
        """获取配置项"""
        return getattr(cls, key, default)
    
    @classmethod
    def set(cls, key, value):
        """设置配置项"""
        setattr(cls, key, value)
    
    @classmethod
    def to_dict(cls):
        """转换为字典"""
        return {
            key: value for key, value in cls.__dict__.items()
            if not key.startswith('_') and not callable(value)
        }


# 用户自定义配置（可选）
class UserConfig(Config):
    """用户自定义配置，继承自Config"""
    pass


# 导出当前配置
current_config = UserConfig()

